File systems manage files and other data objects stored on computer systems. File systems were originally built into a computer's operating system to facilitate access to files stored locally on resident storage media. As computers became networked, some file storage capabilities were offloaded from individual user machines to special storage servers that stored large numbers of files on behalf of the user machines. In this server-based architecture, the file system was extended to facilitate management of and access to files stored remotely at the storage server over a network. Today, file storage is migrating toward a model in which files are stored on various networked computers, rather than on a central storage server.
However, one problem that is encountered in storing files across multiple networked computers, whether it be multiple central storage servers or a serverless architecture, is how the computers reference the files. This problem is only exacerbated as the size of networks and the number of files stored on the networks increases.
For example, computers could reference files using only their file path names, which identify the files beginning with a root and listing each folder or directory in the path to where the file is stored. However, this is problematic because it can require changes to vast amounts of the file system when a file, directory, or folder is renamed or moved. The rename or move operation can cause many of the files and directories or folders that include the renamed or moved file, directory, or folder in their path to also be renamed. Thus, renaming a single file, directory or folder could result in tens of thousands of file path names being changed. Renaming a single file, directory or folder could also result in which ones of the servers are responsible for managing particular file path names being changed for tens of thousands of file path names. Restrictions on renaming or moving files, directories, and folders could be implemented so that renames requiring such large amounts of changes are not permitted, but such restrictions would reduce the user-friendliness of the file system because some rename or move operations would not be permitted.
By way of another example, computers could reference files using a tuple which includes a volume identifier and a file number. The volume identifier identifies which server manages the tuple, and the file number identifies the file on that server. One problem with using such tuples, however, is that a single volume cannot be split across multiple servers—all files having the same volume identifier are managed by the same server. Another problem with using such tuples is that files can be renamed only within the same volume—a file is not permitted to be renamed to have a different volume identifier. Thus, care must be taken in assigning files to volumes when using such tuples. Such restrictions on renaming files, as well as the additional care that must be taken in assigning files to volumes, reduces the user-friendliness of the file system.